# -*- coding:utf-8 -*-
"""
功能：读取摄像头视频，显示出来，转化为HSV色彩空间
     并通过滑块调节HSV阈值，实时显示
     H可以取两个范围并将两个mask取并集
"""
import cv2
import numpy as np


cap = cv2.VideoCapture(0)
cap.set(3,320)
cap.set(4,240)


hsv_low = np.array([0, 0, 0])
hsv_high = np.array([0, 0, 0])
hsv_low0 = np.array([0, 0, 0])
hsv_high0 = np.array([0, 0, 0])


# 下面几个函数，写得有点冗余

def h_low(value): # 取两个h的范围
    hsv_low[0] = value
def h_low0(value):
    hsv_low0[0] = value

def h_high(value):
    hsv_high[0] = value
def h_high0(value):
    hsv_high0[0] = value

def s_low(value):
    hsv_low[1] = value
    hsv_low0[1] = value

def s_high(value):
    hsv_high[1] = value
    hsv_high0[1] = value

def v_low(value):
    hsv_low[2] = value
    hsv_low0[2] = value

def v_high(value):
    hsv_high[2] = value
    hsv_high0[2] = value

cv2.namedWindow('image',cv2.WINDOW_NORMAL)
# H low：
#    0：指向整数变量的可选指针，该变量的值反映滑块的初始位置。
#  179：表示滑块可以达到的最大位置的值为179，最小位置始终为0。
# h_low：指向每次滑块更改位置时要调用的函数的指针，指针指向h_low元组，有默认值。

cv2.createTrackbar('H low', 'image', 0, 179, h_low)
cv2.createTrackbar('H high', 'image', 0, 179, h_high)
cv2.createTrackbar('H low 1', 'image', 179, 179, h_low0)
cv2.createTrackbar('H high 1', 'image', 179, 179, h_high0)
cv2.createTrackbar('S low', 'image', 0, 255, s_low)
cv2.createTrackbar('S high', 'image', 255, 255, s_high)
cv2.createTrackbar('V low', 'image', 0, 255, v_low)
cv2.createTrackbar('V high', 'image', 255, 255, v_high)



while True:
    ret,image = cap.read()
      # 显示图片
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  # BGR转HSV
    mask0 = cv2.inRange(hsv, hsv_low, hsv_high)  # 通过HSV的高低阈值，提取图像部分区域
    mask1 = cv2.inRange(hsv, hsv_low0, hsv_high0)
    mask2 = cv2.add(mask0,mask1) # 对两个mask取并集
    cv2.imshow('mask0', mask0)
    cv2.imshow('mask1', mask1)
    cv2.imshow('mask0+mask1', mask2)
    cv2.imshow("BGR", image)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
